/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import Conexion.AccesoADatos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class Postulante extends Persona {

    private int idPostulante;
    private ArrayList<FormacionAcademica> formacionAcademica;
    private ArrayList<ExperienciaLaboral> experienciaLaboral;
    private Usuario usuario;
    private ArrayList<IdiomaConocido> idiomasConocidos;
    private Aviso aviso;
    private Boolean seleccionado;

    public Postulante(String apellido, String nombre, int nroDoc, TipoDoc tipoDoc, String estadoCivil, String nroCalle, String calle, String sexo, String fechaNacimiento, String email, Boolean seleccionado) {
        super(apellido, nombre, nroDoc, tipoDoc, estadoCivil, nroCalle, calle, sexo, fechaNacimiento, email);
        this.formacionAcademica = new ArrayList<FormacionAcademica>();
        this.experienciaLaboral = new ArrayList<ExperienciaLaboral>();
        this.idiomasConocidos = new ArrayList<IdiomaConocido>();
        this.seleccionado = seleccionado;
    }

    public Postulante() {
    }

    public int getIdPostulante() {
        return idPostulante;
    }

    public void setIdPostulante(int idPostulante) {
        this.idPostulante = idPostulante;
    }

    public Aviso getAviso() {
        return aviso;
    }

    public void setAviso(Aviso aviso) {
        this.aviso = aviso;
    }

    public ArrayList<ExperienciaLaboral> getExperienciaLaboral() {
        return experienciaLaboral;
    }

    public void setExperienciaLaboral(ArrayList experienciaLaboral) {
        this.experienciaLaboral = experienciaLaboral;
    }

    public ArrayList<FormacionAcademica> getFormacionAcademica() {
        return formacionAcademica;
    }

    public void setFormacionAcademica(ArrayList formacionAcademica) {
        this.formacionAcademica = formacionAcademica;
    }

    public ArrayList<IdiomaConocido> getIdiomasConocidos() {
        return idiomasConocidos;
    }

    public void setIdiomasConocidos(ArrayList idiomasConocidos) {
        this.idiomasConocidos = idiomasConocidos;
    }

    public Boolean getSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(Boolean seleccionado) {
        this.seleccionado = seleccionado;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public ArrayList<ExperienciaLaboral> traerExperienciasLaborales() {
        ArrayList<ExperienciaLaboral> expLab = new ArrayList<ExperienciaLaboral>();
        AccesoADatos acceso = new AccesoADatos();
        String fechaDesde;
        String fechaHasta;
        String nombreEmpresa;
        String nombreSupervisor;
        Empleador empleador;
        String tipoTelefono;
        ResultSet rs = acceso.leer("select ex.fechaDesde as fechaDesde, ex.fechaHasta as fechaHasta, ex.nombreSupervisor as nombreSupervisor, ex.nombreEmpresa as nombreEmpresa from experiencialaboral ex where ex.idPostulante=" + this.getIdPostulante());
        try {
            do {
                nombreEmpresa = rs.getString("nombreEmpresa");
                Empleador emp = new Empleador(nombreEmpresa);
                emp.setTelefono(emp.traerTelefono());
                fechaDesde = rs.getDate("fechaDesde").toString();
                fechaHasta = rs.getDate("fechaHasta").toString();
                nombreSupervisor = rs.getString("nombreSupervisor");
                ExperienciaLaboral exp = new ExperienciaLaboral(emp, fechaDesde, fechaHasta, nombreSupervisor);
                expLab.add(exp);
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
        return expLab;

    }

    public ArrayList<FormacionAcademica> traerFormacionesAcademicas() {
        ArrayList<FormacionAcademica> formAc = new ArrayList<FormacionAcademica>();
        AccesoADatos acceso = new AccesoADatos();
        String nombreInstitucion;
        String nombreTipoInstitucion;
        TipoInstitucion tipoInstitucion;
        String nombreLocalidad;
        Localidad localidad;
        String nombreProvincia;
        Provincia provincia;
        Institucion institucion;
        String titulo;
        String nombreTipoTitulo;
        TipoTitulo tipoTitulo;
        String fechaFinalizacion;
        ResultSet rs = acceso.leer("select nombreInstitucion, nombreTipoInstitucion, nombreLocalidad, nombreProvincia, titulo, nombreTipoTitulo, fechaFinalizacion from formacionacademica where idPostulante=" + this.getIdPostulante());
        try {
            do {
                nombreInstitucion = rs.getString("nombreInstitucion");
                nombreTipoInstitucion = rs.getString("nombreTipoInstitucion");
                tipoInstitucion = new TipoInstitucion(nombreTipoInstitucion);
                nombreProvincia = rs.getString("nombreProvincia");
                provincia = new Provincia(nombreProvincia);
                nombreLocalidad = rs.getString("nombreLocalidad");
                localidad = new Localidad(nombreLocalidad, provincia);
                institucion = new Institucion(nombreInstitucion, tipoInstitucion, localidad);
                nombreTipoTitulo = rs.getString("nombreTipoTitulo");
                tipoTitulo = new TipoTitulo(nombreTipoTitulo);
                titulo = rs.getString("titulo");
                fechaFinalizacion = rs.getDate("fechaFinalizacion").toString();
                FormacionAcademica form = new FormacionAcademica(institucion, titulo, tipoTitulo, fechaFinalizacion);
                formAc.add(form);
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
        return formAc;
    }

    public ArrayList<IdiomaConocido> traerIdiomasConocidos() {
        ArrayList<IdiomaConocido> idiomas = new ArrayList<IdiomaConocido>();
        AccesoADatos acceso = new AccesoADatos();
        String nombreIdioma;
        Idioma idioma;
        int codNivel;
        String nivel;
        ResultSet rs = acceso.leer("select nombreIdioma, nivel from idiomaConocido where idPostulante=" + this.getIdPostulante());
        try {
            do {
                nombreIdioma = rs.getString("nombreIdioma");
                idioma = new Idioma(nombreIdioma);
                codNivel = rs.getInt("nivel");
                ResultSet rsNivel = acceso.leer("select n.descripcion as descripcion from nivel n where n.nivel=" + codNivel);
                nivel = rsNivel.getString("descripcion");
                IdiomaConocido idiomaCon = new IdiomaConocido(idioma, nivel);
                idiomas.add(idiomaCon);
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
        return idiomas;
    }

    public boolean insertarPostulante(String idPostulante, int codAviso) {
        AccesoADatos acceso = new AccesoADatos();
        boolean bandera = false;
        for (int i = 0; i < this.getExperienciaLaboral().size(); i++) {
            bandera = this.getExperienciaLaboral().get(i).insertarExperienciaLaboral(idPostulante);
        }
        for (int i = 0; i < this.getFormacionAcademica().size(); i++) {
            bandera = this.getFormacionAcademica().get(i).insertarFormacionAcademica(idPostulante);
        }
        for (int i = 0; i < this.getIdiomasConocidos().size(); i++) {
            bandera = this.getIdiomasConocidos().get(i).insertarIdiomaConocido(idPostulante);
        }
        String consulta = "insert into postulante (idPostulante, nombreTipoDoc, nroDoc, codAviso, seleccionado) ";
        consulta += "values ('" + idPostulante + "', '" + this.getTipoDoc().getNombre() + "', '" + this.getNroDoc() + "', '" + codAviso + "', '0' )";
        bandera = acceso.insertar(consulta);
        return bandera;
    }

    public int getUltimaId() {
        AccesoADatos acceso = new AccesoADatos();
        ResultSet rs = acceso.leer("select count(idPostulante) as idpostulante from postulante");
        try {
            rs.next();
            return (rs.getInt("idpostulante") + 1);
        } catch (SQLException ex) {
            Logger.getLogger(Postulante.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }
}
